//
//  UITextView+Emotion.swift
//  01-表情键盘
//
//  Created by mac on 16/4/22.
//  Copyright © 2016年 itheima. All rights reserved.
//

import UIKit

extension UITextView{
    
     func emotionText() -> String{
        
        let attrText = attributedText
        
        //拼接最终的字符串
        var strM = String()
        //遍历文字数组
        attrText.enumerateAttributesInRange(NSRange(location: 0, length: attrText.length), options: []) { (dict, range, _) -> Void in
            
            //判断使文字还是图片
            if let image = dict["NSAttachment"] as? EmotionAttribute{
                strM += image.emotion.chs ?? ""
            }else{
                // 代表的是文字
                strM += (attrText.string as NSString).substringWithRange(range)
            }
        }
        
        //        print("最终的结果\(strM)")
        
        return strM
    }
    
    
    func insertEmotion(em:Emoticon){
        //如果表情为空
        if em.isEmpty{
            return
        }
        
        // 点击删除按钮
        if em.isRemoved{
            deleteBackward()
            return
        }
        
        //添加emoji图片
        if let emoji = em.emoji{
            replaceRange(selectedTextRange!, withText: emoji)
            
            return
        }
        
        // 4 添加文字
        insetImageEmotion(em)
        
        // 5. 通知`代理`文本变化了 － textViewDidChange? 表示代理如果没有实现方法，就什么都不做，更安全
        delegate?.textViewDidChange?(self)
        
    }
    
    
    func insetImageEmotion(em:Emoticon){
        
        let imageText = EmotionAttribute(emotion: em).imageText(font!)
        
        //2 记录 textView attributeString -> 转换成可变文本
        let strM = NSMutableAttributedString(attributedString: attributedText)
        
        // 3 插入文本图片
        strM.replaceCharactersInRange(selectedRange, withAttributedString: imageText)
        
        // 4 记录鼠标的位置
        let range = selectedRange
        
        attributedText = strM
        //恢复光标的位置 每次都在当前的位置上进行加一操作
        selectedRange = NSRange(location: range.location+1, length: 0)
    }
}










































